In a Multiple Input Multiple Output (MIMO) communication system, optimal capacity is typically achieved using the well known ‘Water-filling’ solution. This practice achieves optimal channel capacity by distributing total available transmit power to transmit antennas according to the Water-filling solution. Usually, this results in unequal power distribution among different transmit antennas and doesn't guarantee that allocated power is within the linear range of the power amplifier associated with the transmit antenna.
A typical MIMO communication system involves multiple antennas, say N, at the transmitter and multiple antennas, say M, at the receiver. Such a system can be used to transmit a maximum of L independent streams where L is a positive integer such that 1≦L≦min(M,N). Each transmitted stream is referred to as a ‘Layer’ and corresponds to a symbol element in input symbol vector x. The input vector x is processed using a precoder filter W and the output is matched to different transmit antennas for RF transmission as shown in FIG. 1 and FIG. 2.
FIG. 3 shows a typical MIMO communication system utilizing Water-filling based precoder resulting in varying power allocation to transmit antennas. For an L-layer MIMO system, lets define the following:
Input symbol,
                    X        =                  [                                                                      x                  1                                                                                    …                                                                                      x                  L                                                              ]                                    (        1        )            
Precoder matrix,
                    w        =                              [                                                                                w                    1                                                                                                …                                                                                                  w                    N                                                                        ]                    =                      [                                                                                                      w                      11                                        ⁢                                                                                  ⁢                    …                    ⁢                                                                                  ⁢                                          w                                              1                        ⁢                                                                                                  ⁢                        L                                                                                                                                          …                                                                                                                        w                                              N                        ⁢                                                                                                  ⁢                        1                                                              ⁢                                                                                  ⁢                    …                    ⁢                                                                                  ⁢                                          w                      NL                                                                                            ]                                              (        2        )            
where wk=[wk1 . . . wkL].
Transmit vector,
                    y        =                              [                                                                                y                    1                                                                                                …                                                                                                  y                    N                                                                        ]                    =          wx                                    (        3        )            
Transmit symbol at kth antenna,yk=wkX  (4)
A conventional water-filling based precoder is designed in the following manner:                a) Perform the SVD decomposition of the channel matrix: H=USVH (where U and V are left and right singular vector matrices, respectively; and S is a diagonal matrix)        b) For L layer transmission, choose L column vectors of V that correspond to largest singular values of channel matrix H. Let this matrix be denoted by VL=[v1 v2 . . . vL], where vk denotes the kth column vector of matrix V.        c) Construct an L×L diagonal matrix Λ such that (i,i)th element denotes the power allocated to the ith singular mode. Water-filling method can generate the optimal power allocation matrix Λ such that the sum of diagonal elements is less than or equal to the total transmit power PT.        d) Precoder matrix is constructed as: W=VL*sqrt(Λ)        
The transmit power allocated to the kth antenna is represented by the kth diagonal entry of the matrix WWH. Usually, such a construction of W results in unequal power allocations to different transmission antennas as shown in FIG. 3.
In the recent past, there has been some work related to more practical precoder design where each antenna has power constraint P as shown in FIG. 4. However, these results are academic in nature with huge computational complexity as no closed-form analytical solutions exist.